package Perfil;

import Trab.ES1.Modelos.Grupo;
import Trab.ES1.Utilidades.Fachada;
import java.util.Scanner;

/**
 *
 * @author Grupo H
 */
public class PerfilGrupo extends Perfil
{
    private Grupo grupo;
    private boolean eDono;
    private Fachada fachada;
    public PerfilGrupo(Grupo g, boolean eDono)
    {
        super(g.getNome(), eDono);
        this.grupo = g;
        fachada = Fachada.getInstancia();
    }
    
    public Grupo getGrupo()
    {
        return this.grupo;
    }

    @Override
    public void exibeCabecalho() 
    {
        System.out.println(this.getGrupo().getNomesUsuariosDoGrupo()+"\n"+this.getGrupo().getNomesReceitasDoGrupo());
    }
    @Override
    public void exibeOpcoes()
    {
        if(eDono)
        {
            Scanner in = new Scanner(System.in);
            int resp = 0;
            do
            {
                System.out.println("1-Editar o nome do grupo\n2-Editar os usuários do grupo\n"
                                + "3-Fazer um usuário administrador do grupo\n4-Deletar grupo\n5-Para sair");

                resp = in.nextInt();
                in.nextLine();
                switch(resp)
                {
                    case 1:
                        editaNome();
                        break;
                    case 2:
                        editaUsuarios();
                        break;
                    case 3:
                        adicionaAdministrador();
                        break;
                    case 4:
                        deletaGrupo();
                        break;
                    case 5:
                        break;
                    default:
                        System.out.println("Opção inválida.");
                }
            }while(resp != 4 && resp != 5);
        }
    }
    private void editaNome()
    {
        Scanner in = new Scanner(System.in);
        String nomeGrupo = "";
        do
        {
            System.out.println("Digite um novo nome para o grupo ou SAIR para sair.");
            nomeGrupo = in.nextLine();
            if(nomeGrupo.equalsIgnoreCase(""))
                System.out.println("Nome deve ser não vazio.");
            else if(fachada.buscaGrupo(nomeGrupo) != null)
                System.out.println("Já existe um nome com este grupo.");
            else
                this.grupo.setNome(nomeGrupo);
        }while(!nomeGrupo.equalsIgnoreCase("sair"));
    }
    private void editaUsuarios()
    {
        Scanner in = new Scanner(System.in);
        int resp = 0;
        do
        {
            System.out.println("1-Para adicionar usuários\n2-Para remover usuários\n3-Para sair");
            switch(resp)
            {
                case 1:
                    adicionaUsuarioNoGrupo();
                    break;
                case 2:
                    removeUsuarioDoGrupo();
                    break;
                case 3:
                    break;
                default:
                    System.out.println("Opção inválida;");
            }
        }while(resp != 3);
    }
    private void adicionaUsuarioNoGrupo()
    {
        Scanner in = new Scanner(System.in);
        String nomeAmigo = "";
        do
        {
            nomeAmigo = "";
            System.out.println("Digite o nome da pessoa a ser adicionada ao grupo ou SAIR para sair.");
            nomeAmigo = in.nextLine();
            if(nomeAmigo.equalsIgnoreCase(""))
                System.out.println("Nome deve ser não vazio.");
            else if(!nomeAmigo.equalsIgnoreCase("sair"))
            {
                if(fachada.verificaExistenciaUsuario(nomeAmigo) && !this.grupo.getUsuariosDoGrupo().contains(fachada.buscaUsuario(nomeAmigo)))
                {
                    this.grupo.getUsuariosDoGrupo().add(fachada.buscaUsuario(nomeAmigo));
                    System.out.println("Adicionado.");
                }
            }
        }while(!nomeAmigo.equalsIgnoreCase("sair"));
    }
    private void removeUsuarioDoGrupo()
    {
        Scanner in = new Scanner(System.in);
        String nomeAmigo = "";
        do
        {
            nomeAmigo = "";
            System.out.println("Digite o nome do amigo a ser removido ou SAIR para sair.");
            nomeAmigo = in.nextLine();
            if(nomeAmigo.equalsIgnoreCase(""))
                System.out.println("Nome deve ser não vazio.");
            else
            {
                if(fachada.verificaExistenciaUsuario(nomeAmigo) && this.grupo.getUsuariosDoGrupo().contains(fachada.buscaUsuario(nomeAmigo)))
                {
                    this.grupo.getUsuariosDoGrupo().remove(fachada.buscaUsuario(nomeAmigo));
                    System.out.println("Removido.");
                }
            }
        }while(!nomeAmigo.equalsIgnoreCase("sair"));
    }
    private void adicionaAdministrador()
    {
        Scanner in = new Scanner(System.in);
        String nomeUsuario = "";
        
        do
        {
            System.out.println("Digite o nome do usuário que será administrador do grupo ou SAIR para sair.");
            nomeUsuario = in.nextLine();
            if(nomeUsuario.equalsIgnoreCase(""))
                System.out.println("Nome do usuário deverá ser não vazio.");
            else
            {
                if(fachada.verificaExistenciaUsuario(nomeUsuario) && this.grupo.getUsuariosDoGrupo().contains(fachada.buscaUsuario(nomeUsuario)) &&
                        !this.grupo.getAdministradoresDoGrupo().contains(fachada.buscaUsuario(nomeUsuario)))
                {
                    this.grupo.getAdministradoresDoGrupo().add(fachada.buscaUsuario(nomeUsuario));
                    System.out.println("O usuário" + nomeUsuario + "se tornou administrador do grupo + " + this.grupo.getNome());
                }
            }
        }while(!nomeUsuario.equalsIgnoreCase("sair"));
    }
    private void deletaGrupo()
    {
        fachada.removeGrupo(this.grupo);        
    }
}
